/* 
 * EntidadeBaseConverter.java
 * 
 * Data de criação: 31/08/2010
 * 
 * CORPORATIVO - MTE. 
 *
 */
package br.com.o2solutions.siso.webapp.converter;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;

import br.com.o2solutions.core.integration.repository.entity.BaseEntity;
import br.com.o2solutions.util.lang.StringUtil;

/**
 * Classe responsável por realizar a conversão dos Objetos do Tipo
 * {@link EntidadeBase} em representações planas e destas para representações
 * complexas (Objetos). Neste caso o tipo generico da entidade
 * {@link EntidadeExemplo} é do tipo Integer. Caso a entidade possua um Id
 * diferente é necessária a adequação da conversão.
 * 
 * @author osvaldeir
 * @since 31/08/2010
 * 
 */
public class EntidadeBaseConverter implements Converter {

	/**
	 * {@inheritDoc}
	 * <p>
	 * Converte a representação plana do objeto (toString) para a representação
	 * complexa (Object).
	 * </p>
	 */
	@Override
	@SuppressWarnings("unchecked")
	public Object getAsObject(FacesContext context, UIComponent component,
			String value) {
		BaseEntity<Integer> result = null;
		if (!StringUtil.isEmpty(value)) {
			String[] plainData = value.split(":");
			String clazzName = plainData[0];
			String idValue = plainData[1];
			try {
				result = (BaseEntity<Integer>) Class.forName(clazzName)
						.newInstance();
				result.setId(idValue.equals("null") ? null : new Integer(
						idValue));
			} catch (Exception e) {
				throw new IllegalArgumentException(
						"Erro ao realizar a conversão da entidade", e);
			}
		}
		return result;
	}

	/**
	 * {@inheritDoc}
	 * <p>
	 * Converte a representação Complexa (Object) em uma representação plana
	 * (String).
	 * </p>
	 */
	@Override
	public String getAsString(FacesContext context, UIComponent component,
			Object value) {
		String result = null;
		if (value != null) {
			result = value.toString();
		}
		return result;
	}

}
